package com.easypan.service;

import java.util.List;

import com.easypan.entity.dto.SessionWebUserDto;
import com.easypan.entity.dto.UploadResultDto;
import com.easypan.entity.query.FileInfoQuery;
import com.easypan.entity.po.FileInfo;
import com.easypan.entity.vo.PaginationResultVO;
import org.springframework.web.multipart.MultipartFile;


/**
 * 文件信息 业务接口
 */
public interface FileInfoService {

	/**
	 * 根据条件查询列表
	 */
	List<FileInfo> findListByParam(FileInfoQuery param);

	/**
	 * 根据条件查询列表
	 */
	Integer findCountByParam(FileInfoQuery param);

	/**
	 * 分页查询
	 */
	PaginationResultVO<FileInfo> findListByPage(FileInfoQuery param);

	/**
	 * 新增
	 */
	Integer add(FileInfo bean);

	/**
	 * 批量新增
	 */
	Integer addBatch(List<FileInfo> listBean);

	/**
	 * 批量新增/修改
	 */
	Integer addOrUpdateBatch(List<FileInfo> listBean);

	/**
	 * 多条件更新
	 */
	Integer updateByParam(FileInfo bean,FileInfoQuery param);

	/**
	 * 多条件删除
	 */
	Integer deleteByParam(FileInfoQuery param);

	/**
	 * 根据FileIdAndUserId查询对象
	 */
	FileInfo getFileInfoByFileIdAndUserId(String fileId,String userId);


	/**
	 * 根据FileIdAndUserId修改
	 */
	Integer updateFileInfoByFileIdAndUserId(FileInfo bean,String fileId,String userId);


	/**
	 * 根据FileIdAndUserId删除
	 */
	Integer deleteFileInfoByFileIdAndUserId(String fileId,String userId);

	/**
	 *
	 */
	UploadResultDto uploadFile(SessionWebUserDto webUserDto, String fileId, MultipartFile file, String fileName, String filePid,
							   String fileMd5, Integer chunkIndex, Integer chunks);

	FileInfo newFolder (String filePid, String userId, String folderName);

	FileInfo rename (String fileId, String userId, String fileName);

	void changeFileFolder(String fileIds, String filePid, String userId);

	/**
	 * 把文件删除
	 * @param userId
	 * @param fileIds
	 */
	void removeFile2RecycleBatch(String userId, String fileIds);

	/**
	 * 批量从回收站恢复文件
	 */
	void recoveryFileBatch (String userId, String fileIds);

	/**
	 * 彻底批量删除
	 * 这里有个管理员操作
	 */
	void delFileBatch (String userId, String fileIds, Boolean adminOp);

	/**
	 * 校验filePid
	 * 这个方法的作用：不能越权，比如我分享一个目录，不能把当前目录同级的其他目录给看到
	 */
	void checkRootFilePid (String rootFilePid, String userId, String fileId);

	/**
	 * 从分享的链接中把文件保存到自己的网盘中
	 */
	void saveShare(String shareRootFilePid, String shareFileIds, String myFolderId, String shareUserId, String currentUserId);

}